// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

#![allow(rustdoc::redundant_explicit_links)]
#![allow(rustdoc::broken_intra_doc_links)]
#![no_implicit_prelude]
extern crate apps_script_calendar;
extern crate apps_script_docs;
extern crate apps_script_drive;
extern crate apps_script_gmail;
extern crate apps_script_sheets;
extern crate apps_script_slides;
extern crate apps_script_type;
extern crate async_trait;
extern crate bytes;
extern crate gax;
extern crate gaxi;
extern crate lazy_static;
extern crate reqwest;
extern crate serde;
extern crate serde_json;
extern crate serde_with;
extern crate std;
extern crate tracing;
extern crate wkt;

mod debug;
mod deserialize;
mod serialize;

/// Request message to get Google Workspace add-ons authorization information.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct GetAuthorizationRequest {
    /// Required. Name of the project for which to get the Google Workspace add-ons
    /// authorization information.
    ///
    /// Example: `projects/my_project/authorization`.
    pub name: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl GetAuthorizationRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::GetAuthorizationRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }
}

impl wkt::message::Message for GetAuthorizationRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.GetAuthorizationRequest"
    }
}

/// The authorization information used when invoking deployment endpoints.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct Authorization {
    /// The canonical full name of this resource.
    /// Example:  `projects/123/authorization`
    pub name: std::string::String,

    /// The email address of the service account used to authenticate requests to
    /// add-on callback endpoints.
    pub service_account_email: std::string::String,

    /// The OAuth client ID used to obtain OAuth access tokens for a user on the
    /// add-on's behalf.
    pub oauth_client_id: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl Authorization {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::Authorization::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }

    /// Sets the value of [service_account_email][crate::model::Authorization::service_account_email].
    pub fn set_service_account_email<T: std::convert::Into<std::string::String>>(
        mut self,
        v: T,
    ) -> Self {
        self.service_account_email = v.into();
        self
    }

    /// Sets the value of [oauth_client_id][crate::model::Authorization::oauth_client_id].
    pub fn set_oauth_client_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.oauth_client_id = v.into();
        self
    }
}

impl wkt::message::Message for Authorization {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.Authorization"
    }
}

/// Request message to create a deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct CreateDeploymentRequest {
    /// Required. Name of the project in which to create the deployment.
    ///
    /// Example: `projects/my_project`.
    pub parent: std::string::String,

    /// Required. The id to use for this deployment.  The full name of the created
    /// resource will be `projects/<project_number>/deployments/<deployment_id>`.
    pub deployment_id: std::string::String,

    /// Required. The deployment to create (deployment.name cannot be set).
    pub deployment: std::option::Option<crate::model::Deployment>,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl CreateDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [parent][crate::model::CreateDeploymentRequest::parent].
    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.parent = v.into();
        self
    }

    /// Sets the value of [deployment_id][crate::model::CreateDeploymentRequest::deployment_id].
    pub fn set_deployment_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.deployment_id = v.into();
        self
    }

    /// Sets the value of [deployment][crate::model::CreateDeploymentRequest::deployment].
    pub fn set_deployment<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<crate::model::Deployment>,
    {
        self.deployment = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [deployment][crate::model::CreateDeploymentRequest::deployment].
    pub fn set_or_clear_deployment<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<crate::model::Deployment>,
    {
        self.deployment = v.map(|x| x.into());
        self
    }
}

impl wkt::message::Message for CreateDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.CreateDeploymentRequest"
    }
}

/// Request message to create or replace a deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct ReplaceDeploymentRequest {
    /// Required. The deployment to create or replace.
    pub deployment: std::option::Option<crate::model::Deployment>,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl ReplaceDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [deployment][crate::model::ReplaceDeploymentRequest::deployment].
    pub fn set_deployment<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<crate::model::Deployment>,
    {
        self.deployment = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [deployment][crate::model::ReplaceDeploymentRequest::deployment].
    pub fn set_or_clear_deployment<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<crate::model::Deployment>,
    {
        self.deployment = v.map(|x| x.into());
        self
    }
}

impl wkt::message::Message for ReplaceDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.ReplaceDeploymentRequest"
    }
}

/// Request message to get a deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct GetDeploymentRequest {
    /// Required. The full resource name of the deployment to get.
    ///
    /// Example:  `projects/my_project/deployments/my_deployment`.
    pub name: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl GetDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::GetDeploymentRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }
}

impl wkt::message::Message for GetDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.GetDeploymentRequest"
    }
}

/// Request message to list deployments for a project.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct ListDeploymentsRequest {
    /// Required. Name of the project in which to create the deployment.
    ///
    /// Example: `projects/my_project`.
    pub parent: std::string::String,

    /// The maximum number of deployments to return. The service may return fewer
    /// than this value.
    /// If unspecified, at most 1000 deployments will be returned.
    /// The maximum value is 1000; values above 1000 will be coerced to 1000.
    pub page_size: i32,

    /// A page token, received from a previous `ListDeployments` call.
    /// Provide this to retrieve the subsequent page.
    ///
    /// When paginating, all other parameters provided to `ListDeployments` must
    /// match the call that provided the page token.
    pub page_token: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl ListDeploymentsRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [parent][crate::model::ListDeploymentsRequest::parent].
    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.parent = v.into();
        self
    }

    /// Sets the value of [page_size][crate::model::ListDeploymentsRequest::page_size].
    pub fn set_page_size<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
        self.page_size = v.into();
        self
    }

    /// Sets the value of [page_token][crate::model::ListDeploymentsRequest::page_token].
    pub fn set_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.page_token = v.into();
        self
    }
}

impl wkt::message::Message for ListDeploymentsRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.ListDeploymentsRequest"
    }
}

/// Response message to list deployments.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct ListDeploymentsResponse {
    /// The list of deployments for the given project.
    pub deployments: std::vec::Vec<crate::model::Deployment>,

    /// A token, which can be sent as `page_token` to retrieve the next page.
    /// If this field is omitted, there are no subsequent pages.
    pub next_page_token: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl ListDeploymentsResponse {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [deployments][crate::model::ListDeploymentsResponse::deployments].
    pub fn set_deployments<T, V>(mut self, v: T) -> Self
    where
        T: std::iter::IntoIterator<Item = V>,
        V: std::convert::Into<crate::model::Deployment>,
    {
        use std::iter::Iterator;
        self.deployments = v.into_iter().map(|i| i.into()).collect();
        self
    }

    /// Sets the value of [next_page_token][crate::model::ListDeploymentsResponse::next_page_token].
    pub fn set_next_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.next_page_token = v.into();
        self
    }
}

impl wkt::message::Message for ListDeploymentsResponse {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.ListDeploymentsResponse"
    }
}

#[doc(hidden)]
impl gax::paginator::internal::PageableResponse for ListDeploymentsResponse {
    type PageItem = crate::model::Deployment;

    fn items(self) -> std::vec::Vec<Self::PageItem> {
        self.deployments
    }

    fn next_page_token(&self) -> std::string::String {
        use std::clone::Clone;
        self.next_page_token.clone()
    }
}

/// Request message to delete a deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct DeleteDeploymentRequest {
    /// Required. The full resource name of the deployment to delete.
    ///
    /// Example:  `projects/my_project/deployments/my_deployment`.
    pub name: std::string::String,

    /// The etag of the deployment to delete.
    /// If this is provided, it must match the server's etag.
    pub etag: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl DeleteDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::DeleteDeploymentRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }

    /// Sets the value of [etag][crate::model::DeleteDeploymentRequest::etag].
    pub fn set_etag<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.etag = v.into();
        self
    }
}

impl wkt::message::Message for DeleteDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.DeleteDeploymentRequest"
    }
}

/// Request message to install a developer mode deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct InstallDeploymentRequest {
    /// Required. The full resource name of the deployment to install.
    ///
    /// Example:  `projects/my_project/deployments/my_deployment`.
    pub name: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl InstallDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::InstallDeploymentRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }
}

impl wkt::message::Message for InstallDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.InstallDeploymentRequest"
    }
}

/// Request message to uninstall a developer mode deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct UninstallDeploymentRequest {
    /// Required. The full resource name of the deployment to install.
    ///
    /// Example:  `projects/my_project/deployments/my_deployment`.
    pub name: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl UninstallDeploymentRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::UninstallDeploymentRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }
}

impl wkt::message::Message for UninstallDeploymentRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.UninstallDeploymentRequest"
    }
}

/// Request message to get the install status of a developer mode deployment.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct GetInstallStatusRequest {
    /// Required. The full resource name of the deployment.
    ///
    /// Example:  `projects/my_project/deployments/my_deployment/installStatus`.
    pub name: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl GetInstallStatusRequest {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::GetInstallStatusRequest::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }
}

impl wkt::message::Message for GetInstallStatusRequest {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.GetInstallStatusRequest"
    }
}

/// Developer mode install status of a deployment
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct InstallStatus {
    /// The canonical full resource name of the deployment install status.
    ///
    /// Example:  `projects/123/deployments/my_deployment/installStatus`.
    pub name: std::string::String,

    /// True if the deployment is installed for the user
    pub installed: std::option::Option<wkt::BoolValue>,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl InstallStatus {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::InstallStatus::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }

    /// Sets the value of [installed][crate::model::InstallStatus::installed].
    pub fn set_installed<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<wkt::BoolValue>,
    {
        self.installed = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [installed][crate::model::InstallStatus::installed].
    pub fn set_or_clear_installed<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<wkt::BoolValue>,
    {
        self.installed = v.map(|x| x.into());
        self
    }
}

impl wkt::message::Message for InstallStatus {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.InstallStatus"
    }
}

/// A Google Workspace add-on deployment
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct Deployment {
    /// The deployment resource name.
    /// Example:  projects/123/deployments/my_deployment.
    pub name: std::string::String,

    /// The list of Google OAuth scopes for which to request consent from the end
    /// user before executing an add-on endpoint.
    pub oauth_scopes: std::vec::Vec<std::string::String>,

    /// The Google Workspace add-on configuration.
    pub add_ons: std::option::Option<crate::model::AddOns>,

    /// This value is computed by the server based on the version of the
    /// deployment in storage, and may be sent on update and delete requests to
    /// ensure the client has an up-to-date value before proceeding.
    pub etag: std::string::String,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl Deployment {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [name][crate::model::Deployment::name].
    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.name = v.into();
        self
    }

    /// Sets the value of [oauth_scopes][crate::model::Deployment::oauth_scopes].
    pub fn set_oauth_scopes<T, V>(mut self, v: T) -> Self
    where
        T: std::iter::IntoIterator<Item = V>,
        V: std::convert::Into<std::string::String>,
    {
        use std::iter::Iterator;
        self.oauth_scopes = v.into_iter().map(|i| i.into()).collect();
        self
    }

    /// Sets the value of [add_ons][crate::model::Deployment::add_ons].
    pub fn set_add_ons<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<crate::model::AddOns>,
    {
        self.add_ons = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [add_ons][crate::model::Deployment::add_ons].
    pub fn set_or_clear_add_ons<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<crate::model::AddOns>,
    {
        self.add_ons = v.map(|x| x.into());
        self
    }

    /// Sets the value of [etag][crate::model::Deployment::etag].
    pub fn set_etag<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
        self.etag = v.into();
        self
    }
}

impl wkt::message::Message for Deployment {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.Deployment"
    }
}

/// A Google Workspace add-on configuration.
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct AddOns {
    /// Configuration that is common across all Google Workspace add-ons.
    pub common: std::option::Option<apps_script_type::model::CommonAddOnManifest>,

    /// Gmail add-on configuration.
    pub gmail: std::option::Option<apps_script_gmail::model::GmailAddOnManifest>,

    /// Drive add-on configuration.
    pub drive: std::option::Option<apps_script_drive::model::DriveAddOnManifest>,

    /// Calendar add-on configuration.
    pub calendar: std::option::Option<apps_script_calendar::model::CalendarAddOnManifest>,

    /// Docs add-on configuration.
    pub docs: std::option::Option<apps_script_docs::model::DocsAddOnManifest>,

    /// Sheets add-on configuration.
    pub sheets: std::option::Option<apps_script_sheets::model::SheetsAddOnManifest>,

    /// Slides add-on configuration.
    pub slides: std::option::Option<apps_script_slides::model::SlidesAddOnManifest>,

    /// Options for sending requests to add-on HTTP endpoints
    pub http_options: std::option::Option<apps_script_type::model::HttpOptions>,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl AddOns {
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [common][crate::model::AddOns::common].
    pub fn set_common<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_type::model::CommonAddOnManifest>,
    {
        self.common = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [common][crate::model::AddOns::common].
    pub fn set_or_clear_common<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_type::model::CommonAddOnManifest>,
    {
        self.common = v.map(|x| x.into());
        self
    }

    /// Sets the value of [gmail][crate::model::AddOns::gmail].
    pub fn set_gmail<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_gmail::model::GmailAddOnManifest>,
    {
        self.gmail = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [gmail][crate::model::AddOns::gmail].
    pub fn set_or_clear_gmail<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_gmail::model::GmailAddOnManifest>,
    {
        self.gmail = v.map(|x| x.into());
        self
    }

    /// Sets the value of [drive][crate::model::AddOns::drive].
    pub fn set_drive<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_drive::model::DriveAddOnManifest>,
    {
        self.drive = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [drive][crate::model::AddOns::drive].
    pub fn set_or_clear_drive<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_drive::model::DriveAddOnManifest>,
    {
        self.drive = v.map(|x| x.into());
        self
    }

    /// Sets the value of [calendar][crate::model::AddOns::calendar].
    pub fn set_calendar<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_calendar::model::CalendarAddOnManifest>,
    {
        self.calendar = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [calendar][crate::model::AddOns::calendar].
    pub fn set_or_clear_calendar<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_calendar::model::CalendarAddOnManifest>,
    {
        self.calendar = v.map(|x| x.into());
        self
    }

    /// Sets the value of [docs][crate::model::AddOns::docs].
    pub fn set_docs<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_docs::model::DocsAddOnManifest>,
    {
        self.docs = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [docs][crate::model::AddOns::docs].
    pub fn set_or_clear_docs<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_docs::model::DocsAddOnManifest>,
    {
        self.docs = v.map(|x| x.into());
        self
    }

    /// Sets the value of [sheets][crate::model::AddOns::sheets].
    pub fn set_sheets<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_sheets::model::SheetsAddOnManifest>,
    {
        self.sheets = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [sheets][crate::model::AddOns::sheets].
    pub fn set_or_clear_sheets<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_sheets::model::SheetsAddOnManifest>,
    {
        self.sheets = v.map(|x| x.into());
        self
    }

    /// Sets the value of [slides][crate::model::AddOns::slides].
    pub fn set_slides<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_slides::model::SlidesAddOnManifest>,
    {
        self.slides = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [slides][crate::model::AddOns::slides].
    pub fn set_or_clear_slides<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_slides::model::SlidesAddOnManifest>,
    {
        self.slides = v.map(|x| x.into());
        self
    }

    /// Sets the value of [http_options][crate::model::AddOns::http_options].
    pub fn set_http_options<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<apps_script_type::model::HttpOptions>,
    {
        self.http_options = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [http_options][crate::model::AddOns::http_options].
    pub fn set_or_clear_http_options<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<apps_script_type::model::HttpOptions>,
    {
        self.http_options = v.map(|x| x.into());
        self
    }
}

impl wkt::message::Message for AddOns {
    fn typename() -> &'static str {
        "type.googleapis.com/google.cloud.gsuiteaddons.v1.AddOns"
    }
}
